<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>

    <script>


       // 当对象的键名不存在的时候，不会报错，只会为undefined
       // 当访问数组不存在的下标的时候，也不会报错，只会为undefined  [1,2,3]   arr[10] -> undefined



        var obj = {
            a : 1 , 
            b : 2 
        }

        console.log(obj.a) ;

        // 当对象的键名不存在的时候，不会报错，只会为undefined
        console.log(obj.c) ;   // undefined



        var arr = [1,2,3] ;
        console.log(arr[100]) ;   // undefined


        // var arr = {
        //     0 : 1 ,
        //     1 : 2 ,
        //     2 : 3
        // }




        var arr = [1,11,2,1,3,2,3,2,3,1] ;

        var obj = {} ;

        // {
        //     1 : 1 ,
        //     1已经有了   1 : 2
        //     2 : 1
        //     1已经有了   1 ：3
        //     ...
        // }


        // 遍历数组
        //   把数组中的值当做对象的键名
        //   对象中的键值是多少
        //      键名不存在   键值设为1
        //      键名已经存在  键值自增1 

        // console.log(obj[arr[0]]) ;    undefined  -> 键名不存在


        for(var i in arr) {
            if(obj[arr[i]]) {
                obj[arr[i]]++ ;
            }
            else {
                obj[arr[i]] = 1 ;
            }
        }

        console.log(obj);


        // 瑕疵：实现去重和统计的时候，会改变原数组的顺序

    </script>
    
</body>
</html>